#include<stdio.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<unistd.h>
#include<stdlib.h>
int main()
{
    pid_t id = fork();
    if (id == 0) 
    {
	    int cnt = 10;
	    while (cnt--)
        {
		  printf("I am child...PID:%d, PPID:%d,cnt:%d\n", getpid(), getppid(),cnt);
		  sleep(1);
	    }
	    exit(10);//自己设置了一个退出码
    }
    //parent
    //sleep(20);//父进程先不回收子进程，先让我们观察一下子进程的僵尸状态，再回收
    //pid_t ret = wait(NULL);//等待成功返回子进程PID
    int status=0;
    pid_t ret = waitpid(id,&status,0);//这里0表示阻塞
    if(ret>0)
    {
        //通过宏函数获取退出码
        //如果终止信号正常，即程序正常退出，才有对应的退出码，否则退出码无意义
        if(WIFEXITED(status))
        {
            //判断子进程运行结果是否ok
            printf("exit code: %d\n",WEXITSTATUS(status));
        }
        else
        {
            printf("child exit not normal\n");
        }
        //printf("wait success: %d，sig number: %d, child exit code: %d\n",ret,(status & 0x7F),(status>>8)&0xFF);//拿到终止信号 和 子进程的退出码
    }
    sleep(5);
    return 0;
    
}
